/**
 * 读取数据源的配置文件
 *
 * @author 花狐
 * @QQ 137428857
 * @date 2015-09-20
 * @description 将一个文件夹内的所有文件都当做是数据库连接池配置文件加载
 * @level 5
 * @from 此代码来自Aorey Summer Framework 并存放在HashMap中,键名将作为索引的名称,键值对应的是连接池连接
 */
package aorey.database;

import aorey.io.FileInfo;
import aorey.io.Folder;
import com.alibaba.druid.pool.DruidDataSourceFactory;

import java.io.File;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Properties;
import java.io.FileInputStream;
import javax.sql.DataSource;

public class DataSourceConfig
{

    public HashMap<String, DataSource> read(String dir)
    {
        File ds = new File(dir);
        if (ds.isDirectory() && ds.canRead())
        {
            HashMap<String, DataSource> rs = new HashMap<>();
            Folder f = new Folder(dir);
            List<FileInfo> config_list = f.getFiles();
            int s = config_list.size();
            // 配置文件
            File conf;
            // 配置文件流
            InputStream in;
            // 解析配置文件
            Properties props;
            // 数据源配置
            DataSource dsc = null;
            // cfName配置文件完整路径
            // cfIndex存放数据源的键
            String cfName, cfIndex;
            // 循环读取配置文件夹下的配置文件
            for (int i = 0; i < s; i++)
            {
                try
                {
                    // 获取配置文件完整路径
                    cfName = config_list.get(i).filePath;
                    // 获取配置文件的短名,这将作为数据源配置的键
                    cfIndex = config_list.get(i).fileName;

                    // 配置文件指针
                    conf = new File(cfName);
                    // 配置文件流
                    in = new FileInputStream(conf);
                    // 配置文件解析对象
                    props = new Properties();
                    // 加载配置文件
                    props.load(in);
                    // 数据源对应的配置文件
                    dsc = DruidDataSourceFactory.createDataSource(props);
                    // 将连接池对象写入全局数组
                    rs.put(cfIndex.trim(), dsc);

                    in.close();
                    dsc = null;
                    props = null;
                } catch (Exception e)
                {
                    System.out.println("数据源问题:" + e.getMessage());
                }
            }
            return rs;
        }
        return null;
    }
}
